Transmission Control Protocol (“TCP”) is a commonly used protocol in the Internet Protocol (“IP”) suite that provides transport layer data transmission services to application programs. For example, a TCP socket may interface with an application program to receive or send a byte stream of application layer data by segmenting the data based on maximum TCP segment sizes configured by the operating system and sending the segmented data to a network layer (e.g., an IP network layer).
Network congestion, traffic load balancing, or other unpredictable network behavior may result in some IP packets being lost, duplicated, or delivered out of order. TCP components can detect these problems, request retransmission of lost data, and rearrange out-of-order data. Additionally, TCP components may implement congestion control mechanisms to help minimize network congestion.
Existing TCP congestion control mechanisms (e.g., slow start mechanisms) are designed for wireline networks, which typically have fixed network capacities and predictable behavior. Unfortunately, these congestion control mechanisms do not work well for wireless networks, which may experience rapid fluctuations in network capacity. This is because existing TCP congestion control mechanisms cannot detect such fluctuations fast enough to adequately compensate for them. As a result, the network capacity of wireless networks is often underutilized.
Currently available TCP acceleration devices typically use a proxy based approached where both ends of a TCP socket are terminated. These TCP acceleration devices attempt to improve throughput by using different TCP implementations optimized for the wireless network. This is problematic because of latency and scaling issues and still uses TCP to make estimates of the wireless network capacity at any given time. Such estimates are often too slow to respond to sudden fluctuations in the wireless network capacity.